/** 
 * Project Name:qfhy 
 * File Name:BaseDao.java 
 * Package Name:com.wf.qfhy.dao 
 * Date:2017年4月26日上午11:10:58 
 * Copyright (c) 2017, wxwj All Rights Reserved. 
 */

package com.wf.qfhy.dao;

import java.io.Serializable;
import java.util.List;
import java.util.Map;

/**
 * @ClassName: BaseDao
 * @Description:
 * @author 王飞
 * @date 2017年4月26日 上午11:10:58
 * 
 */
public interface IBaseDao<T> {

	public Class<T> getEntityClass();

	/**
	 * @Title: 保存对象
	 * @Description:
	 * @param o
	 *            对象
	 * @return
	 */
	public Serializable save(T o);

	/**
	 * @Title: 根据类的类型以及id获得对象
	 * @Description:
	 * @param c类的类型
	 * @param id
	 *            主键
	 * @return
	 */
	public T getById(Class<T> c, Serializable id);

	/**
	 * @Title: 根据hql语句获得对象
	 * @Description:
	 * @param hql
	 *            语句
	 * @return
	 */
	public T get(String hql);

	/**
	 * @Title: 根据sql语句以及查询条件查询对象
	 * @Description:
	 * @param hql
	 *            语句
	 * @param params
	 *            查询条件
	 * @return
	 */
	public T getByParams(String hql, Map<String, Object> params);

	/**
	 * @Title: 删除对象
	 * @Description:
	 * @param o
	 *            对象
	 */
	public void delete(T o);

	/**
	 * @Title: 更新对象
	 * @Description:
	 * @param o
	 *            对象
	 */
	public void update(T o);

	/**
	 * @Title: 保存或者删除对象
	 * @Description:
	 * @param o
	 *            对象
	 */
	public void saveOrUpdate(T o);

	/**
	 * @Title: 根据hql语句查询对象列表
	 * @Description:
	 * @param hql
	 *            语句
	 * @return
	 */
	public List<T> find(String hql);

	/**
	 * @Title: 根据hql语句，查询条件查询对象列表
	 * @Description:
	 * @param hql
	 *            语句
	 * @param params
	 *            查询条件
	 * @return
	 */
	public List<T> findByParams(String hql, Map<String, Object> params);

	/**
	 * @Title: 根据分页，hql语句，查询条件找到对象列表
	 * @Description:
	 * @param hql
	 *            语句
	 * @param params
	 *            查询条件
	 * @param page
	 *            页数
	 * @param rows
	 *            行数
	 * @return
	 */
	public List<T> findPagedListByParams(String hql, Map<String, Object> params, int page, int rows);

	/**
	 * @Title: 根据分页，hql语句找到对象列表
	 * @Description:
	 * @param hql
	 *            语句
	 * @param page
	 *            页数
	 * @param rows
	 *            行数
	 * @return
	 */
	public List<T> findPagedList(String hql, int page, int rows);

	/**
	 * @Title: 根据hql语句计算结果个数
	 * @Description:
	 * @param hql
	 *            语句
	 * @return
	 */
	public Long count(String hql);

	/**
	 * @Title: 根据hql语句、查询条件计算结果个数
	 * @Description:
	 * @param hql
	 *            语句
	 * @param params
	 *            查询条件
	 * @return
	 */
	public Long countByParams(String hql, Map<String, Object> params);

	/**
	 * @Title: 执行hql语句
	 * @Description:
	 * @param hql
	 *            语句
	 * @return
	 */
	public int executeHql(String hql);

	/**
	 * @Title: 执行hql以及查询参数语句
	 * @Description:
	 * @param hql
	 *            语句
	 * @param params
	 *            查询条件
	 * @return
	 */
	public int executeHqlByParams(String hql, Map<String, Object> params);

}
